package cn.szbo.jksystem.core;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.RowMapper;

/**
 * @author nick xue
 * 
 *         2012-7-20 下午3:46:12
 */
public interface GenericDao<T> {

    /**
     * 增加数据
     * 
     * @param sql
     * @param values
     */
    public int insert(String sql, List<Object> values);

    /**
     * 修改数据
     * 
     * @param sql
     * @param values
     */
    public int update(String sql, List<Object> values);

    /**
     * 删除数据
     * 
     * @param sql
     * @param values
     */
    public int delete(String sql, List<Object> values);

    /**
     * 单个数值查询
     * 
     * @param sql
     *            比如：select count(*) from user where id=?
     * @param values
     * @return
     */
    public long queryForLong(String sql, List<Object> values);

    /**
     * 批量查询
     * 
     * @param sql
     *            比如：select * from user where id=?
     * @param values
     * @return 每条记录为map,其中key为字段名，value为数据库字段值
     */
    @SuppressWarnings("unchecked")
    public List<Map<String, Object>> queryForList(String sql, List<Object> values);

    /**
     * 批量查询，返回对象集合
     * 
     * @param sql
     * @param values
     * @param userObject
     * @return
     */
    public List<Object> queryForList(String sql, List<Object> values,
            RowMapper userObject);

    /**
     * 单一查询,返回KEY=VALUE的MAP
     * 
     * @param sql
     * @param values
     * @return
     */
    public Map<String, Object> queryForSingle(String sql, List<Object> values);

    /**
     * 单一查询，返回单个对象
     * 
     * @param sql
     * @param values
     * @param userObject
     * @return
     */
    public Object queryForSingle(String sql, List<Object> values,
            RowMapper userObject);

}
